package com.cam.framework.utils;

import cn.hutool.core.util.StrUtil;

public class StringUtils extends org.apache.commons.lang3.StringUtils {

    /*
    * 驼峰转下划线，使用strUtil的toUnderlineCase方法
    * myTestField 和 MyTestField都会转为 my_test_field
    * */
    public static String CamelToUnderlineCase(String str) {
        // toUnderLineCase 有很多特殊情况，比如QRCode、qRCode会保留个别大写字母，所以需要强制转为全小写
        return StrUtil.toUnderlineCase(str).toLowerCase();
    }


    /*
    * 下划线转驼峰，常用于数据库字段名与java属性名的转换
    * 例，my_test_field 转为 myTestField
    * */
    public static String underlineToCamelCase(String str) {
        return StrUtil.toCamelCase(str);
    }

    public static String underlineToPascalCase(String str) {
        // 先转为驼峰格式，再首字母大写
        return capitalize(StrUtil.toCamelCase(str));
    }

    /*
    * 帕斯卡转为连字符规则，常用于html模块化模块名与标签的转换
    * 例，MyTestElem 转为 my-test-elem，QRCode 转为 qr-code
    * */
    public static String pascalToHyphenCase(String str) {
        if (str == null) return null;
        str = CamelToUnderlineCase(str); // 先转化为下划线模式
        str = str.replace("_", "-"); // 再把下划线替换为连字符
        return str;
    }

    /*
    * 帕斯卡虽则转为驼峰规则，常用于实体类名转为变量名
    * 例，MyTestClass 转为 myTestClass，注意，QRCode 转为 qrCode
    * */
    public static String pascalToCamelCase(String str) {
        if (str == null) return null;
        str = CamelToUnderlineCase(str); // 先转为连字符且全小写，
        str = StrUtil.toCamelCase(str); // 再转为驼峰规则
        return str;
    }

}
